import 'package:flutter/material.dart';

class LifeCycleDemo extends StatefulWidget {
  LifeCycleDemo({Key key}) : super(key: key);

  @override
  _LifeCycleDemoState createState() => _LifeCycleDemoState();
}

//1： 初始化时期，createState,initState
// 当我们构建一个新的statefulwidget时 createState会立即调用，并且这个方法被重载

// 2：更新时期，didChangeDependencies build,didUpdateWidget

// 3:销毁期 dispose deactivate

class _LifeCycleDemoState extends State<LifeCycleDemo> {
  int count = 0;
  @override
  void initState() {
    // 做一些初始化工作，比如一些监听器
    print('initState');
    // 调用父类的方法
    super.initState();
  }

  @override
  void didChangeDependencies() {
    // 所依赖的state对象改变的时候调用
    // a: 在第一次构建widget时，initState 之后会调用
    // b: 如果StatefulWidget 依赖于inheritedwidget,那么当当前state所依赖的inheritedwidget的变量改变时会再次调用
    // 注意： inheritedwidget 可以高效的将数据在widget树中向下传递，共享的 widget

    print('didChangeDependencies');
    super.didChangeDependencies();
  }

  @override
  void didUpdateWidget(covariant LifeCycleDemo oldWidget) {
    // 不太常用，当父组件需要重绘时才会调用
    // 一般用法 if(oldWidget.xxx != widget.xxx) {}
    print('didUpdateWidget');

    super.didUpdateWidget(oldWidget);
  }

//build 方法 didChangeDependencies 以及 setState后立即被调用
//
  @override
  Widget build(BuildContext context) {
    print('build 了$count ');
    return Scaffold(
      appBar: AppBar(
        title: Text('flutter单个生命周期'),
      ),
      body: ListView(
        children: [
          Container(
            child: Text('生命周期$count'),
          ),
          FlatButton(
            onPressed: _counthandle,
            child: Text('点击'),
          )
        ],
      ),
    );
  }

  // 很少使用 在组件被移除时在dispose调用前被调用
  @override
  void deactivate() {
    print('deactivate');
    super.deactivate();
  }

  // 组件被销毁的时候调用
  // 比如监听器的销毁，
  @override
  void dispose() {
    print('dispose');
    super.dispose();
  }

  void _counthandle() {
    setState(() {
      count += 1;
    });
  }
}
